package com.zxx.pattern.compositePattern.composite1;

import java.util.ArrayList;
import java.util.List;

/**
 * 模拟电脑中文件系统的层级结构
 *
 * 其中除了名称（name）、是否是文件夹（isDir）、文件大小（size）、所处层级（level）外，还有一个子文件列表的引用。
 * @author zxx on 2021/5/20
 */
public class MyFile {

    public String name; // 文件名称
    public boolean isDir; // 是否是文件夹，是返回true，否则返回false
    public double size; // 文件大小
    public int level; // 文件所在的层级，根文件是0级
    private List<MyFile> subFiles; // 文件的子文件（只有文件夹才有子文件）

    public MyFile() {
        subFiles = new ArrayList<>();
    }

    public MyFile(String name, boolean isDir, double size, int level) {
        this();
        this.name = name;
        this.isDir = isDir;
        this.size = size;
        this.level = level;
    }

    public List<MyFile> getSubFiles() {
        return subFiles;
    }

    public void setSubFiles(List<MyFile> subFiles) {
        this.subFiles = subFiles;
    }

    public void addSubFile(MyFile file) {
        this.subFiles.add(file);
    }

    @Override
    public String toString() {
        StringBuffer sb = new StringBuffer();
        for (int i = 1; i <= level; i++) {
            sb.append("----");
        }
        sb.append("(" + (isDir ? "dir" : "file") + ")");
        sb.append(name);
        sb.append("(" + size + "K)");
        return sb.toString();
    }

}
